// import { defineStore } from 'pinia'
// import { ref } from 'vue'

// // const localData = localStorage.getItem('pz_v3pz')
// // const parsedData = JSON.parse(localData)
// export const useMenuStore = defineStore('menu', () => {
//   // 数据 - 使用默认值初始化，插件会自动从 localStorage 恢复
//   const isCollapse = ref(false)
//   const selectMenu = ref([])
//   const routerList = ref([])

//   // 方法
//   // 折叠菜单
//   const collapseMenu = () => {
//     isCollapse.value = !isCollapse.value
//   }
//   // 添加菜单 + 去重
//   const addMenu = (menu) => {
//     if (selectMenu.value.findIndex(item => item.meta.name === menu.meta.name) === -1) {
//       selectMenu.value.push(menu)
//     }
//   }
//   // 删除菜单
//   const deleteMenu = (menu) => {
//     if (selectMenu.value.findIndex(item => item.meta.name === menu.meta.name) !== -1) {
//       selectMenu.value.splice(selectMenu.value.findIndex(item => item.meta.name === menu.meta.name), 1)
//     }
//   }

//   // 动态菜单
//   const dynamicMenu = (permissions) => {
//     // 通过glob导入路由文件
//     const modules = import.meta.glob('../views/**/**/*.vue')
//     console.log(modules)
//     // 动态路由设置
//     const routerSet = (router) => {
//       router.forEach(route => {
//         // 如果没有子菜单，拼接路由数据
//         if (!route.children) {
//           const url = `../views${route.meta.path}/index.vue`
//           // 根据路由路径获取路由组件，（modules是一个对象，通过key，获取value）
//           route.component = modules[url]
//         } else {
//           // 如果有子菜单，递归调用
//           routerSet(route.children)
//         }
//       })
//     }
//     routerSet(permissions)
//     routerList.value = permissions
//   }
//   return {
//     isCollapse,
//     selectMenu,
//     routerList,
//     collapseMenu,
//     addMenu,
//     deleteMenu,
//     dynamicMenu
//   }
// },
// {
//   persist: {
//     key: 'pz_v3pz',
//     storage: window.localStorage,
//     paths: ['isCollapse', 'selectMenu', 'routerList']
//   }
// })

import { defineStore } from 'pinia'
import { ref, watch } from 'vue'
import router from '../router' // 导入路由实例

export const useMenuStore = defineStore('menu', () => {
  // 数据 - 由Pinia持久化插件自动从localStorage恢复
  const isCollapse = ref(false)
  const selectMenu = ref([])
  const routerList = ref([])
  const menuActive = ref('1-1')

  // 方法
  // 折叠菜单
  const collapseMenu = () => {
    isCollapse.value = !isCollapse.value
  }

  // 添加菜单 + 去重
  const addMenu = (menu) => {
    if (selectMenu.value.findIndex(item => item.meta?.name === menu.meta?.name) === -1) {
      selectMenu.value.push(menu)
    }
  }

  // 删除菜单
  const deleteMenu = (menu) => {
    const index = selectMenu.value.findIndex(item => item.meta?.name === menu.meta?.name)
    if (index !== -1) {
      selectMenu.value.splice(index, 1)
    }
  }

  // 菜单激活
  const updateMenuActive = (index) => {
    menuActive.value = index
  }

  // 动态菜单设置 - 处理组件映射
  const dynamicMenu = (permissions) => {
    if (!permissions || !permissions.length) return []
    
    // 通过glob导入路由文件
    const modules = import.meta.glob('../views/**/**/*.vue')
    
    // 递归设置路由组件
    const routerSet = (routes) => {
      return routes.map(route => {
        // 复制路由对象避免直接修改源数据
        const newRoute = { ...route }
        
        // 处理组件
        if (!newRoute.children || newRoute.children.length === 0) {
          // 构建组件路径 - 确保路径正确
          const url = `../views${newRoute.meta?.path || newRoute.path}/index.vue`
          newRoute.component = modules[url]
          
          // 调试用 - 检查组件是否找到
          if (!newRoute.component) {
            console.warn(`未找到组件: ${url}`)
          }
        } else {
          // 递归处理子路由
          newRoute.children = routerSet(newRoute.children)
        }
        
        return newRoute
      })
    }
    
    // 处理权限路由并更新路由列表
    const processedRoutes = routerSet(permissions)
    routerList.value = processedRoutes
    return processedRoutes
  }

  // 当routerList变化时，自动更新路由
  watch(routerList, (newRoutes) => {
    if (newRoutes && newRoutes.length) {
      // 清除现有动态路由
      clearDynamicRoutes()
      // 添加新路由
      addRoutesToRouter(newRoutes)
    }
  }, { deep: true })

  // 清除动态路由
  const clearDynamicRoutes = () => {
    router.getRoutes().forEach(route => {
      if (route.meta?.isDynamic) {
        router.removeRoute(route.name)
      }
    })
  }

  // 添加路由到路由器
  const addRoutesToRouter = (routes, parentName = 'main') => {
    routes.forEach(route => {
      // 标记为动态路由
      route.meta = { ...route.meta, isDynamic: true }
      // 添加路由
      router.addRoute(parentName, route)
      // 处理子路由
      if (route.children && route.children.length) {
        addRoutesToRouter(route.children, route.name)
      }
    })
  }

  return {
    isCollapse,
    selectMenu,
    routerList,
    collapseMenu,
    addMenu,
    deleteMenu,
    updateMenuActive,
    dynamicMenu
  }
}, {
  persist: {
    key: 'pz_v3pz',
    storage: window.localStorage,
    paths: ['isCollapse', 'selectMenu', 'routerList']
  }
})
